package data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Calendar;
import java.util.Vector;

import model.ItemPresupuesto;
import model.Presupuesto;

public class AdmPersistPresupuesto {
	
	private static AdmPersistPresupuesto instancia;
	
	private AdmPersistPresupuesto(){
		
	}
	
	public static AdmPersistPresupuesto getInstancia(){
		if(instancia==null)
			instancia=new AdmPersistPresupuesto();
		return instancia;
	}
	
	public void insert (Object o){
		try
		{						
			Presupuesto p = (Presupuesto)o;			
			Connection con = PoolConnection.getPoolConnection().getConnection();
			PreparedStatement s = con.prepareStatement("insert into seminario.dbo.Presupuestos values (?,?,?,?,?,?,?)");
			//agregar campos		
			s.setInt(1,p.getNroPresupuesto());
			long test = p.getProveedor().getCuit();			
			s.setLong(2,test);					
			s.setInt(3,p.getReclamo().getNro());
			s.setString(4,String.valueOf(p.getFecha().get(Calendar.YEAR)+"-"+p.getFecha().get(Calendar.MONTH)+"-"+p.getFecha().get(Calendar.DATE)));
			s.setString(5,String.valueOf(p.getFechaValidez().get(Calendar.YEAR)+"-"+p.getFechaValidez().get(Calendar.MONTH)+"-"+p.getFechaValidez().get(Calendar.DATE)));
			s.setBoolean(6,p.isEstado());	
			s.setFloat(7,p.calcularTotal());
			
			s.execute();
			
			//agregamos los items para el presupuesto
			Vector<ItemPresupuesto> items = p.getItemsPresupuesto();
			
			for (int i=0; i<items.size();i++){
				ItemPresupuesto item = items.elementAt(i);
				
				s = con.prepareStatement("insert into seminario.dbo.ItemsPresupuesto values (?,?,?,?)");
				//agregar campos		
				s.setInt(1,p.getNroPresupuesto());
				s.setInt(2,this.getMaxNroItem(p.getNroPresupuesto())+1);
				s.setString(3,item.getDetalle());
				s.setFloat(4,item.getMonto());
				
				s.execute();
			}					
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
		catch (Exception e)
		{
			System.out.println("error al insertar presupuesto");
			System.out.println("Stack Trace al escribir la Base de datos: " + e.getStackTrace());
		}
	}
	
	public int getMaxNroPresupuesto(){
		try{
			int numero = 1;
			Connection con = PoolConnection.getPoolConnection().getConnection();
			PreparedStatement s = con.prepareStatement("select max(numero) as numero from seminario.dbo.Presupuestos");
			ResultSet result = s.executeQuery();
			while(result.next()){
				numero = result.getInt(1);
			}
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return numero;			
		}
		catch (Exception e)
		{
			System.out.println();
		}
		return 0;
	}
	
	private int getMaxNroItem(int nroPresupuesto){
		try{
			int numero = 1;
			Connection con = PoolConnection.getPoolConnection().getConnection();
			PreparedStatement s = con.prepareStatement("select max(nroItem) as numero from seminario.dbo.ItemsPresupuesto " +
														"where nroPresupuesto = ?");
			s.setInt(1,nroPresupuesto);
			ResultSet result = s.executeQuery();
			while(result.next()){
				numero = result.getInt(1);
			}
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return numero;
		}
		catch (Exception e)
		{
			System.out.println();
		}
		return 0;
	}
}
